//
// Created by DELL on 2025/2/13.-+
//

#include "Semaphore.h"

namespace zdotp {
    // p操作
    void Semaphore::wait() {
        std::unique_lock lock(mtx_);
        cv_.wait(lock, [&] {
            return ref_limit_ > 0;
        });
        --ref_limit_;
    }

    // v操作
    void Semaphore::post() {
        std::unique_lock lock(mtx_);
        ++ref_limit_;
        cv_.notify_all();
    }
} // zdotp